package com.cskaoyan.javase.oop2._2polymorphic._2advantage._2cast;

/**
 * 向下转型，引用数据类型的强制类型转换
 * 通过编译的前提： 继承，必须发生在同一条继承链中
 * 作用： 将父类引用转换成子类引用
 * 语法： 子类类型 变量名 =（子类类型的名字）父类引用;
 * 成功运行，成功强转的前提是：
 *      强转后的引用要真的能够指向原先父类引用，指向的对象
 *      这要求，强转后的引用的数据类型，要么是：
 *          1，就是对象的数据类型
 *          2，是对象的数据类型的父类类型
 *
 *
 * @since 14:54
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 父类引用指向子类对象
        Grandfather gf = new Grandson();
        // Grandson gs = (Grandson) gf;
        Grandson gs =  new Grandson();
        // Father f = (Father) gf;
        Father f = new Grandson();
        // Son s = (Son) gf;
        Son s = new Grandson();
    }
}

class Grandfather {
}

class Father extends Grandfather {
}

class Son extends Father {
}

class Grandson extends Son {
}